/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dswII.biblioteca.bl;

import java.util.Date;
import java.util.List;
import java.util.Timer;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dswII.biblioteca.enumeracion.EstadoDetallePrestamo;
import mx.its.dswII.biblioteca.enumeracion.EstadoTransaccion;
import mx.its.dswII.biblioteca8e.dao.DetallePrestamoDaoLocal;
import mx.its.dswII.biblioteca8e.dao.PrestamoDaoLocal;
import mx.its.dswII.biblioteca8e.modelo.DetallePrestamo;
import mx.its.dswII.biblioteca8e.modelo.Libro;
import mx.its.dswII.biblioteca8e.modelo.Prestamo;

/**
 *
 * @author MAXXWELL
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;
    
    @Override
    public EstadoTransaccion register(Prestamo lend, List<Libro> libros) {
        int available=3;
        List<Prestamo> incompleteLends= prestamoDao.findIncomplete(lend.getIdUsuario());
        for (Prestamo p:incompleteLends){
            available=available-detallePrestamoDao.findLends(p).size();
        }
        if(available<=0 || libros.size()>available){
            return EstadoTransaccion.INCOMPLETO;
        }else{
            Date fecha = new Date();            
            prestamoDao.create(lend);
            lend.setFecha(fecha);
            lend.setHora(fecha);
            for(Libro b: libros){
                DetallePrestamo dp = new DetallePrestamo();               
                dp.setIdLibro(b);
                dp.setIdPrestamo(lend);
                dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
                detallePrestamoDao.create(dp);
            }
        }
        return EstadoTransaccion.COMPLETO;
    }
    
    
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public EstadoTransaccion takeBack(List<Libro> books) {
        for(Libro book: books){
            DetallePrestamo dp =detallePrestamoDao.findBooks(book);
            if(dp==null){
                return EstadoTransaccion.INCOMPLETO;
            }else{
                dp.setEstado(EstadoDetallePrestamo.REGRESADO.ordinal());
                detallePrestamoDao.edit(dp);
            }
        }
        return null;
    }
    
}
